/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package models.dao;

import basedatos.DataBaseInstance;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import models.entity.Producto;

/**
 *
 * @author cepardov
 */
public class ProductoDao {
    protected Connection getConnection() {
        return DataBaseInstance.getInstanceConnection();
    }
    
    public Object [][] getUsuarios(){
        int posid = 0;
        try{
            PreparedStatement pstm = getConnection().prepareStatement("SELECT count(1) as total FROM producto");
            try (ResultSet res = pstm.executeQuery()) {
                res.next();
                posid = res.getInt("total");
                res.close();
            }
            this.closeConnection();
            }catch(SQLException se){
                JOptionPane.showMessageDialog(null, se);
        }
        
        Object[][] data = new String[posid][7];
        
        try{
            PreparedStatement pstm = getConnection().prepareStatement("SELECT prod_id,prov_empresa,prov_nombre,prov_apellido,prov_telefono,prov_correo,prov_descripcion FROM producto ORDER BY prov_empresa");
            try (ResultSet res = pstm.executeQuery()) {
                int increment = 0;
                while(res.next()){
                    String estProd_id = res.getString("prod_id");
                    String estProv_empresa = res.getString("prov_empresa");
                    String estProv_nombre = res.getString("prov_nombre");
                    String estProv_apellido = res.getString("prov_apellido");
                    String estProv_telefono = res.getString("prov_telefono");
                    String estProv_correo = res.getString("prov_correo");
                    String estProv_descripcion = res.getString("prov_descripcion");
                    data[increment][0] = estProd_id;
                    data[increment][1] = estProv_empresa;
                    data[increment][2] = estProv_nombre;
                    data[increment][3] = estProv_apellido;
                    data[increment][4] = estProv_telefono;
                    data[increment][5] = estProv_correo;
                    data[increment][6] = estProv_descripcion;
                    increment++;
                }
                res.close();
            }
            this.closeConnection();
            }catch(SQLException se){
                JOptionPane.showMessageDialog(null, se);
        }
        return data;
    }
    
    public boolean findById(Producto producto) {
        PreparedStatement getProducto;
        ResultSet result = null;
        try {
            getProducto = getConnection().prepareStatement("SELECT * FROM producto WHERE prod_id = ?");
//            getProducto.setString(1, producto.getProd_id());
            result = getProducto.executeQuery();
            
            if (result.next()) {
//                producto.setProd_id(result.getString("prod_id"));
//                producto.setProv_empresa(result.getString("prov_empresa"));
//                System.out.println("res: "+result.getString("prov_empresa"));
//                producto.setProv_nombre(result.getString("prov_nombre"));
//                producto.setProv_apellido(result.getString("prov_apellido"));
//                producto.setProv_telefono(result.getString("prov_telefono"));
//                producto.setProv_correo(result.getString("prov_correo"));
//                producto.setProv_descripcion(result.getString("prov_descripcion"));
                result.close();
            } else {
                return false;
            }
            closeConnection();
            return true;
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
            return false;
        }
    }
    
    
    public boolean save(Producto producto) {
        PreparedStatement saveProducto;
        try {
            saveProducto = getConnection().prepareStatement(
                    "INSERT INTO producto ("
                            + "prod_id,"
                            + "prov_prov_id,"
                            + "prod_cod,"
                            + "prod_num_factura,"
                            + "prod_fecha_ing,"
                            + "prod_fecha_venc,"
                            + "prod_nombre,"
                            + "prod_descripcion,"
                            + "prod_stock,"
                            + "prod_precioprov,"
                            + "prod_preciopublic,"
                            + "preciodesc,"
                            + "prod_medida) "
                    + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
            saveProducto.setString(1, producto.getProd_id());
            saveProducto.setString(2, producto.getProv_prov_id());
            saveProducto.setString(3, producto.getProd_cod());
            saveProducto.setInt(4, producto.getProd_num_factura());
            saveProducto.setString(5, producto.getProd_fecha_ing());
            saveProducto.setString(6, producto.getProd_fecha_venc());
            saveProducto.setString(7, producto.getProd_nombre());
            saveProducto.setString(8, producto.getProd_descripcion());
            saveProducto.setInt(9, producto.getProd_stock());
            saveProducto.setDouble(10, producto.getProd_precioprov());
            saveProducto.setDouble(11, producto.getProd_preciopublic());
            saveProducto.setInt(12, producto.getPreciodesc());
            saveProducto.setString(13, producto.getProd_medida());
                
            saveProducto.executeUpdate();

            this.closeConnection();
            return true;
        } catch (SQLException se) {
            int errorcod=se.getErrorCode();
            System.err.println("Debug: ("+errorcod+") Error ejecutando saveProducto(): "+se.getMessage());
            producto.setError(""+errorcod);
            return false;
        }
    }
    
    public boolean update(Producto producto) {
        PreparedStatement saveProducto;
        try {
            saveProducto = getConnection().prepareStatement(
                    "UPDATE producto SET "
                            + "prod_id=?,"
                            + "prov_prov_id=?,"
                            + "prod_cod=?,"
                            + "prod_num_factura=?,"
                            + "prod_fecha_ing=?,"
                            + "prod_fecha_venc=?,"
                            + "prod_nombre=?,"
                            + "prod_descripcion=?,"
                            + "prod_stock=?,"
                            + "prod_precioprov=?,"
                            + "prod_preciopublic=?,"
                            + "preciodesc=?,"
                            + "prod_medida=? "
                            + "WHERE prod_id=?");
            saveProducto.setString(1, producto.getProd_id());
            saveProducto.setString(2, producto.getProv_prov_id());
            saveProducto.setString(3, producto.getProd_cod());
            saveProducto.setInt(4, producto.getProd_num_factura());
            saveProducto.setString(5, producto.getProd_fecha_ing());
            saveProducto.setString(6, producto.getProd_fecha_venc());
            saveProducto.setString(7, producto.getProd_nombre());
            saveProducto.setString(8, producto.getProd_descripcion());
            saveProducto.setInt(9, producto.getProd_stock());
            saveProducto.setDouble(10, producto.getProd_precioprov());
            saveProducto.setDouble(11, producto.getProd_preciopublic());
            saveProducto.setInt(12, producto.getPreciodesc());
            saveProducto.setString(13, producto.getProd_medida());
            saveProducto.setString(14, producto.getProd_id_update());
            
            saveProducto.executeUpdate();
            
            this.closeConnection();
            return true;
        } catch (SQLException se) {
            int errorcod=se.getErrorCode();
            System.err.println("Debug: ("+errorcod+") Error ejecutando updateProducto(): "+se.getMessage());
            producto.setError(""+errorcod);
            return false;
        }
    }

    public boolean delete(Producto producto) {
        PreparedStatement delProducto;
        try {

            if (producto.getProd_id() != null) {
                delProducto = getConnection().prepareStatement(
                        "DELETE FROM producto WHERE prod_id = ?");
                delProducto.setString(1, producto.getProd_id());
                delProducto.executeUpdate();
            }
            closeConnection();
            return true;
        } catch (SQLException se) {
            int errorcod=se.getErrorCode();
            System.err.println("Debug: ("+errorcod+") Error ejecutando deleteProducto(): "+se.getMessage());
            producto.setError(""+errorcod);
            return false;
        }
    }

    public void closeConnection() {
        DataBaseInstance.closeConnection();
    }
    
    private void errorMsj(String msj){
        JOptionPane.showMessageDialog(null, msj, "Adm. de Base de Datos", JOptionPane.ERROR_MESSAGE);
    }
    
}
